package io.FileStream;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInputStreamDemo {
    public static void main(String[] args) throws IOException {
        /*
        java.io.InputStream抽象类是表示字节输入流的所有类的父类，可以读取字节信息到内存中
        它定义了字节输入流的基本共性功能的方法

        public void close()         关闭此输入流并释放于此流相关联的任何系统资源
        public abstract int read()  从输入流读取数据得下一个字节
        public int read(byte[] b)   从输入流中读取一些字节数，并将它们存储到字节数组b中
         */

    /*
        java.io.FileInputStream类是文件输入流，从文件中读取字节
        public FileInputStream(File file)     通过打开与实际文件的连接来创建一个FileInputStream，该文件有文件系统中的File对象file命名
        public FileInputStream(String name)   通过打开与实际文件的连接来创建一个FileInputStream，该文件有文件系统中的File对象name命名
   */

/*

//        使用File创建对象
        File file=new File("a.txt");
        FileInputStream fos=new FileInputStream(file);
//        使用文件名称创建对象
        FileInputStream fos2=new FileInputStream("b.txt");
*/

//        read方法每次可以读取一个字节的数据，提升为int类型，读取到文件末尾  返回-1
//        使用文件名创建流对象
        FileInputStream fis=new FileInputStream("b.txt");//在FileOutputStream创建的文件

//        读取数据，返回一个字节
        int read= fis.read();
        System.out.println(read);//97
//        循环改进读取的方法
//        定义变量，保存数据
        int b;
        while ((b=fis.read())!=-1){
//            System.out.println((char)b);
        }



//            一次读取一个字节数组
//        定义变量，作为有效个数
        int len;
//        定义字节数组，作为装字节数据的容器
        byte[] c =new byte[10];
//        循环读取
        while ((len=fis.read(c))!=-1){
//            每次读取后，把数组的有效字节部分，变成字符串打印
          System.out.println(new String(c,0,len));
        }
        fis.close();
    }
}
